home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Apple II Magazines (PO)
/
Nibble Volume 09, No. 08 (1988-08)(MicroSPARC)(Side A).zip
/
Nibble Volume 09, No. 08 (1988-08)(MicroSPARC)(Side A).po
/
INST.DATE.TIM.S
< prev
next >
Wrap
Text File
|
1996-12-24
|
5KB
|
167 lines
*
* INST.DATE.TIME Source Code
* By Royce Bacon
* Copyright(c) 1988
* MicroSPARC, Inc.
* Concord, MA 01742
*
HIMEM EQU $73 ;HIMEM LOCATION
BITMAP EQU $BF58 ;SYSTEM BIT MAP
EXTRNCMD EQU $BE06 ;EXTERNAL COMMAND VECTOR
DOSCMD EQU $BE03 ;EXECUTE DOS COMMAND
ERROUT EQU $BE09
ERRCODE EQU $BE0F ;DOS ERROR CODE
PRINTERR EQU $BE0C ;PRINT DOS ERROR MSG
BUFIN EQU $200 ;INPUT BUFER AREA
SVADDR EQU 6 ;ADDR SAVE AREA
COUT EQU $FDED ;OUTPUT A CHAR
RETURN EQU $8D ;CARRIAGE RETURN
MSB ON
ORG $2000
* SET HIMEM DOWN BY 256
START DEC HIMEM+1 ;SUBTRACT 256 FROM HIMEM
DEC HIMEM+1 ;ANOTHER 256 FOR 512 TOTAL
LDX HIMEM+1
INX ;ADD 1K TO HIMEM
INX ;FOR BLOAD ADDR
INX
INX
TXA ;GET HIMEM+1K
PHA ;SAVE HIMEM+1K
* MOVE BLOAD COMMAND TO BUFFER
LDY #0
MVLOOP LDA CMD,Y ;GET BYTE OF COMMAND
BEQ MVDONE ;END OF COMMAND
STA BUFIN,Y ;MOVE TO BUFFER
INY ;NEXT CHAR
BNE MVLOOP ;DO ALL CHARS
* ADD HEX ADDR TO BLOAD COMMAND
MVDONE PLA ;GET HIMEM+1K
PHA ;SAVE IT AGAIN
STA SVADDR+1
JSR CVBYTE ;CONVERT TO HEX
LDA HIMEM ;NOW LOW BYTE
STA SVADDR
JSR CVBYTE
LDA #RETURN
STA BUFIN,Y ;AT END OF COMMAND
JSR DOSCMD ;LOAD THE PROGRAM
BCS LOADERR BRANCH IF ERROR
BNE LOADERR ;ERROR ON LOAD
PLA ;GET HIMEM+1K AGAIN
TAX ;SAVE FOR LATER
* GET BIT IN SYSTEM BIT MAP
* AND SET SYSTEM BIT MAP TO PROTECT DATE.TIME
LSR A ;MOVE BYTE NUMBER
LSR A ; TO THE
LSR A ; RIGHT
TAY ;SAVE THE BYTE NUMBER
TXA ;GET BIT IN BYTE
AND #$07 ;MASK OFF BYTE NUM
TAX ;SAVE BIT IN BYTE
LDA #$80 ;BIT 7 SET FOR BIT 0 IN BYTE
LOOP DEX ;DONE SHIFTING?
BMI SETBIT ;YES, SET BIT
LSR A ;ELSE SHIFT AGAIN
JMP LOOP
SETBIT ORA BITMAP,Y ;SET SELECTED BIT
STA BITMAP,Y ;UPDATE SYSTEM BIT MAP
LSR A ;SHIFT ONCE MORE
BNE SETBIT2 ;SET NEXT BIT IF OK
INY ;NEXT BYTE IN BITMAP
LDA #$80 ;BIT 7 SET
SETBIT2 ORA BITMAP,Y ;SET SELECTED BIT
STA BITMAP,Y ;UPDATE SYSTEM BIT MAP
* GET CURRENT EXTRNCMD VECTOR AND MOVE TO NEW COMMAND
LDA EXTRNCMD+1 ;GET LOW BYTE
LDY #1
STA (SVADDR),Y ;PUT IN NEW PROG
LDA EXTRNCMD+2 ;GET HIGH BYTE
INY
STA (SVADDR),Y ;PUT IN NEW PROG
* SET EXTRNCMD VECTOR TO DATE.TIME PROGRAM
INC SVADDR ;BYPASS THE
INC SVADDR ;JMP TO THE OLD
INC SVADDR ;EXTRNCMD VECTOR
LDA SVADDR ;GET ADDR OF NEW PROG
STA EXTRNCMD+1 ;AND PUT IN EXTERNAL
LDA SVADDR+1 ;COMMAND VECTOR
STA EXTRNCMD+2
*
* PRINT INSTRUCTIONS
*
LDA #>MSG ;SET PTR TO MSG
STA SVADDR
LDA #<MSG
STA SVADDR+1
LDY #0
MSGLOOP LDA (SVADDR),Y ;GET CHAR OF MSG
BEQ EXIT ;END OF MSG
JSR COUT ;PRINT THE CHAR
INY ;NEXT CHAR OF MSG
BNE MSGLOOP
EXIT LDA #'B' ;PUT BELL CMD
STA BUFIN ;IN BUFFER
LDA #'E'
STA BUFIN+1
LDA #'L'
STA BUFIN+2
STA BUFIN+3
LDA #RETURN ;END WITH RETURN
STA BUFIN+4
JSR DOSCMD ;SOUND THE PRODOS BELL
LDA #1
STA $BF90
LDA #$B1
STA $BF91 INITIALIZE DATE
RTS ;EXIT
*
* ERROR ON BLOAD OF PROGRAM
*
LOADERR JSR PRINTERR ;PRINT DOS ERROR MSG
PLA FIX STACK
JMP $3D0 EXIT TO BASIC
*
* CONVERT A BYTE TO HEX
*
CVBYTE PHA ;SAVE CHAR
LSR A ;GET HIGH ORDER
LSR A ; DIGIT
LSR A
LSR A
JSR CVHEX ;CONVERT TO HEX
PLA ;RESTORE CHAR
AND #$0F ;GET LOW ORDER DIGIT
JSR CVHEX ;CONVERT TO HEX
RTS ;EXIT
* CONVERT ACCUM TO HEX DIGIT
CVHEX ORA #$B0 ;MAKE A DIGIT
CMP #$BA ;A-F?
BCC SVIT ;NO - IS DIGIT
ADC #$06 ;YES - CONVERT TO CHAR A-F
SVIT STA BUFIN,Y ;SAVE HEX DIGIT
INY ;NEXT CHAR OF BUFFER
RTS ;EXIT
*
* ASC STRING FOR BLOAD COMMAND
*
CMD ASC 'BLOAD DATE.TIME,A$'
DFB 0 ;END OF COMMAND STRING
*
* INSTRUCTIONS
*
MSG ASC "DATE.TIME INSTALLED"
DFB RETURN
DFB RETURN
ASC "COMMAND FORMATS ARE:"
DFB RETURN
ASC "DATE (PRINT CURRENT DATE)"
DFB RETURN
ASC "TIME (PRINT CURRENT TIME)"
DFB RETURN
ASC "TIME THH:MM (SET TIME TO HH:MM)"
DFB RETURN
ASC "BELL (SOUND THE PRODOS BELL)"
DFB RETURN
DFB 0 ;END OF MSG